/*
 - Autor(es):
 -      Rommel A. Quintanilla C.
 -      Donia A. Ruelas A.
 -      Julio C. Ccahuana M.
 - Fecha: 16/05/07

 - Copyleft: (C) 2007
 - Este programa es software libre. Puede redistribuirlo y/o modificarlo bajo los
 - terminos de la Licencia Publica General de GNU segun es publicada por la Free
 - Software Foundation, de la version 2 de dicha Licencia.
 -
 - Este programa se distribuye con la esperanza de que sea util, pero SI NINGUNA
 - GARANTIA; tampoco las implicitas garantias de MERCANTILIDAD o ADECUACION A UN
 - PROPOSITO PARTICULAR. Consulte la GNU General Public License (GPL) para mas
 - detalles adjuntada a este programa. (Fichero: JuradoWeb-License.txt).
 -
 - Descripcion:
 - BeanProblemaDatos.
*/

package pe.edu.unap.jurado.BeansDatos;

import javax.xml.bind.*;
import java.io.*;
import java.sql.*;
import java.util.*;
import pe.edu.unap.jurado.BeansDatos.BeanConfiguracionDatos;
import pe.edu.unap.jurado.Beans.*;

public class BeanProblemaDatos extends BeanDatos
{
  public BeanProblemaDatos()
  throws SQLException
  {
   fichero = new String("BeanProblemaDatos.java");  
  }
 
 public String getNumProblemas()
 throws SQLException
 {
  ResultSet resultado=null;
  instruccion=conexion.prepareStatement("SELECT COUNT(idProblema) from Problema;");
  resultado=instruccion.executeQuery();
  resultado.next();
  String numProblema = new String(resultado.getString(1));
  return numProblema;
 }

 public BeanProblema getProblema(String idProblema)
 throws SQLException
 {
  instruccion=conexion.prepareStatement("SELECT * FROM Problema WHERE idProblema = ?;");
  instruccion.setString(1,idProblema);
  ResultSet resultado=instruccion.executeQuery();

  BeanProblema problema=new BeanProblema();
  resultado.next();

  problema.setIdProblema(resultado.getString(1));
  problema.setIdAdministrador(resultado.getString(2));
  problema.setIdTipoDeProblema(resultado.getString(3));
  problema.setTitulo(resultado.getString(4));
  problema.setDescripcion(resultado.getString(5));
  problema.setEntrada(resultado.getString(6));
  problema.setSalida(resultado.getString(7));
  problema.setEjemEntrada(resultado.getString(8));
  problema.setEjemSalida(resultado.getString(9));
  problema.setFuente(resultado.getString(10));
  problema.setNumVecesIntentadas(resultado.getString(11));
  problema.setNumVecesAceptadas(resultado.getString(12));
  problema.setVisibilidad(resultado.getString(13));
  return problema;
 }

 public Boolean esProblema(String idProblema)
 throws SQLException
 {
  try
  {
   instruccion=conexion.prepareStatement("SELECT * FROM Problema WHERE idProblema = ?;");
   instruccion.setString(1,idProblema);
   ResultSet resultado=instruccion.executeQuery();
   if(resultado.next())
   {
     return true;
   }
  }
  catch(SQLException e)
  {
   e.printStackTrace();
  }
  return false;
 }

 public List getListaProblema()
 throws SQLException
 {
  List lista=new ArrayList();
  instruccion=conexion.prepareStatement("SELECT * FROM Problema WHERE visibilidad=?");
  instruccion.setString(1,"1");
  ResultSet resultado=instruccion.executeQuery();

  while(resultado.next())
  {
   BeanProblema problema=new BeanProblema();
   problema.setIdProblema(resultado.getString(1));
   problema.setIdAdministrador(resultado.getString(2));
   problema.setIdTipoDeProblema(resultado.getString(3));
   problema.setTitulo(resultado.getString(4));
   problema.setDescripcion(resultado.getString(5));
   problema.setEntrada(resultado.getString(6));
   problema.setSalida(resultado.getString(7));
   problema.setEjemEntrada(resultado.getString(8));
   problema.setEjemSalida(resultado.getString(9));
   problema.setFuente(resultado.getString(10));
   problema.setNumVecesIntentadas(resultado.getString(11));
   problema.setNumVecesAceptadas(resultado.getString(12));
   problema.setVisibilidad(resultado.getString(13));
   lista.add(problema);
  }
  return lista;
 }
 
 public List getListaProblemaAdministrador()
 throws SQLException
 {
  List lista=new ArrayList();
  instruccion=conexion.prepareStatement("SELECT * FROM Problema;");
  ResultSet resultado=instruccion.executeQuery();

  while(resultado.next())
  {
   BeanProblema problema=new BeanProblema();
   problema.setIdProblema(resultado.getString(1));
   problema.setIdAdministrador(resultado.getString(2));
   problema.setIdTipoDeProblema(resultado.getString(3));
   problema.setTitulo(resultado.getString(4));
   problema.setDescripcion(resultado.getString(5));
   problema.setEntrada(resultado.getString(6));
   problema.setSalida(resultado.getString(7));
   problema.setEjemEntrada(resultado.getString(8));
   problema.setEjemSalida(resultado.getString(9));
   problema.setFuente(resultado.getString(10));
   problema.setNumVecesIntentadas(resultado.getString(11));
   problema.setNumVecesAceptadas(resultado.getString(12));
   problema.setVisibilidad(resultado.getString(13));
   lista.add(problema);
  }
  return lista;
 }

 public void registrarProblema(BeanProblema problema)
 throws SQLException
 {
  instruccion=conexion.prepareStatement("INSERT INTO Problema (idAdministrador,idTipoDeProblema,titulo,descripcion,entrada,salida,ejemEntrada,ejemSalida,fuente) VALUES(?,?,?,?,?,?,?,?,?);");
  instruccion.setString(1,problema.getIdAdministrador());
  instruccion.setString(2,problema.getIdTipoDeProblema());
  instruccion.setString(3,problema.getTitulo());
  instruccion.setString(4,problema.getDescripcion());
  instruccion.setString(5,problema.getEntrada());
  instruccion.setString(6,problema.getSalida());
  instruccion.setString(7,problema.getEjemEntrada());
  instruccion.setString(8,problema.getEjemSalida());
  instruccion.setString(9,problema.getFuente());
  instruccion.executeUpdate();
 }

 public void sumarSolucionProblema(BeanProblema problema)
 throws SQLException
 {
  instruccion=conexion.prepareStatement("SELECT numVecesAceptadas FROM Problema WHERE idProblema = ?;");
  instruccion.setString(1,problema.getIdProblema());
  ResultSet resultado=instruccion.executeQuery();

  resultado.next();
  String numVecesAceptadas = new String(resultado.getString(1));
  int i_numVecesAceptadas = Integer.parseInt(numVecesAceptadas.trim());
  i_numVecesAceptadas++;
  numVecesAceptadas = String.valueOf(i_numVecesAceptadas);

  instruccion=conexion.prepareStatement("UPDATE Problema SET numVecesAceptadas = ? WHERE idProblema = ? ;");
  instruccion.setString(1, numVecesAceptadas);
  instruccion.setString(2,problema.getIdProblema());
  instruccion.executeUpdate();
 }

 public void sumarIntentoProblema(BeanProblema problema)
 throws SQLException
 {
  instruccion=conexion.prepareStatement("SELECT numVecesIntentadas FROM Problema WHERE idProblema = ?;");
  instruccion.setString(1,problema.getIdProblema());
  ResultSet resultado=instruccion.executeQuery();

  resultado.next();
  String numVecesIntentadas = new String(resultado.getString(1));
  int i_numVecesIntentadas = Integer.parseInt(numVecesIntentadas.trim());
  i_numVecesIntentadas++;
  numVecesIntentadas = String.valueOf(i_numVecesIntentadas);

  instruccion=conexion.prepareStatement("UPDATE Problema SET numVecesIntentadas = ? WHERE idProblema = ?;");
  instruccion.setString(1,numVecesIntentadas);
  instruccion.setString(2,problema.getIdProblema());
  instruccion.executeUpdate();
 }
 
 public void mostrarProblema(String idProblema)
 throws SQLException
 {
  instruccion=conexion.prepareStatement("UPDATE Problema SET visibilidad = ? WHERE idProblema = ?;");
  instruccion.setString(1,"1");
  instruccion.setString(2,idProblema);
  instruccion.executeUpdate();  
 }

 public void ocultarProblema(String idProblema)
 throws SQLException
 {
  instruccion=conexion.prepareStatement("UPDATE Problema SET visibilidad = ? WHERE idProblema = ?;");
  instruccion.setString(1,"0");
  instruccion.setString(2,idProblema);
  instruccion.executeUpdate();  
 } 
}
